<?php

namespace Album\Controller;

use Bike\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Album\Model\Album;
use Album\Form\AlbumForm;

/**
 *
 * @author d.mas
 *
 */
class AlbumController extends AbstractActionController
{
	protected $albumTable;

	public function getAlbumTable()
	{
		if (!$this->albumTable) {
			$sm = $this->getServiceLocator();
			$this->albumTable = $sm->get('Album\Model\AlbumTable');
		}
		return $this->albumTable;
	}

	public function actionFrontIndex()
	{
		return new ViewModel(array(
			'albums' => $this->getAlbumTable()->fetchAll(),
		));
	}

	public function actionFrontAdd()
	{
		$form = new AlbumForm();
		$form->get('submit')->setValue('Add');

		$request = $this->getRequest();
		if ($request->isPost()) {
			$album = new Album();
			$form->setInputFilter($album->getInputFilter());
			$form->setData($request->getPost());

			if ($form->isValid()) {
				$album->exchangeArray($form->getData());
				$this->getAlbumTable()->saveAlbum($album);

				// Redirect to list of albums
				return $this->redirect()->toRoute('base/album');
			}
		}
		return array('form' => $form);

	}

	public function actionFrontEdit()
	{


		$id = (int) $this->params()->fromRoute('id', 0);
		if (!$id) {
			return $this->redirect()->toRoute('base/album', array(
				'action' => 'add'
			));
		}
		$album = $this->getAlbumTable()->getAlbum($id);

		$form  = new AlbumForm();
		$form->bind($album);
		$form->get('submit')->setAttribute('value', 'Edit');

		$request = $this->getRequest();
		if ($request->isPost()) {
			$form->setInputFilter($album->getInputFilter());
			$form->setData($request->getPost());

			if ($form->isValid()) {
				$this->getAlbumTable()->saveAlbum($form->getData());

				// Redirect to list of albums
				return $this->redirect()->toRoute('base/album');
			}
		}

		return array(
			'id' => $id,
			'form' => $form,
		);
	}

	public function actionFrontDelete()
	{
		$id = (int) $this->params()->fromRoute('id', 0);
		if (!$id) {
			return $this->redirect()->toRoute('base/album');
		}

		$request = $this->getRequest();
		if ($request->isPost()) {
			$del = $request->getPost('del', 'No');

			if ($del == 'Yes') {
				$id = (int) $request->getPost('id');
				$this->getAlbumTable()->deleteAlbum($id);
			}

			// Redirect to list of albums
			return $this->redirect()->toRoute('base/album');
		}

		return array(
		'id'    => $id,
		'album' => $this->getAlbumTable()->getAlbum($id)
		);
	}
}

?>